/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名: com.oceansoft.mobile.econsole.modules.sys.service.impl.RoleServiceImpl.java 
 * <p>
 * 类产生时间: 2014-5-14 下午 15:16
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 掌上公安应用平台
 * <p>
 * 所在部门: 开发部--手持技术部
 * <p>
 * <p>
 */
package cn.com.oceansoft.business.sys.service.impl;

import cn.com.oceansoft.nos.common.util.web.PageUtil;
import cn.com.oceansoft.business.base.entity.Pager;
import cn.com.oceansoft.business.base.entity.Query;
import cn.com.oceansoft.business.base.entity.Result;
import cn.com.oceansoft.business.sys.entity.SysRole;
import cn.com.oceansoft.business.sys.persistence.ISysRoleMapper;
import cn.com.oceansoft.business.sys.service.ISysRoleService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 系统角色业务操作组件实现类
 *
 * @author: chenw
 * @time: 2014-5-14 下午 15:16
 */
@Service
public class SysRoleServiceImpl implements ISysRoleService {

    @Resource
    private ISysRoleMapper roleMapper;

    @Override
    public Pager<SysRole> findPageByCondition(Query query) {
        PageHelper.startPage(query.getPageNum(), query.getNumPerPage(), true);
        return PageUtil.page2pager((Page<SysRole>) roleMapper.findPageByCondition(query), query);
    }

    @Override
    @Transactional
    public Result save(SysRole role) {
        int id = roleMapper.save(role);
        if (0 < id) {
            role.setId(id);
            return new Result(Result.SUCC, role);
        } else {
            return new Result(Result.FAILURE, "角色新增失败！");
        }
    }

    @Override
    @Transactional
    public Result update(SysRole role) {
        int id = roleMapper.update(role);
        if (1 == id) {
            return new Result(Result.SUCC, role);
        } else {
            return new Result(Result.FAILURE, "角色更新失败！");
        }
    }

    @Override
    public SysRole findById(int roleId) {
        return roleMapper.findById(roleId);
    }

    @Override
    @Transactional(readOnly = false, rollbackFor = Exception.class)
    public Result deleteRoleById(int roleId) {
        //判断当前角色是否关联有人员信息 T_SYS_USER_ROLE
        int count1 = roleMapper.countUserRoleRelationByRoldId(roleId);
        if (count1 > 0) {
            return new Result(Result.FAILURE, String.format("当前有%d人关联当前角色，请删除后再操作！", count1));
        }
        //判断当前角色是否关系资源信息 T_SYS_ROLE_RESOURCE
        int count2 = roleMapper.countRoleResourceRelationByRoldId(roleId);
        if (count2 > 0) {
            return new Result(Result.FAILURE, String.format("当前角色已绑定%d条资源，请删除后再操作！", count2));
        }
        int rt = roleMapper.deleteRoleById(roleId);
        if (rt == 1) {
            return new Result();
        } else {
            return new Result(Result.FAILURE, "删除角色失败");
        }
    }

    @Override
    public List<SysRole> findRoleByUserId(String userId) {
        return roleMapper.findRoleByUserId(userId);
    }
}
